
let names = [ '刘恒' , '刘启' , '刘彻' , '刘弗陵' , '海昏侯' , '刘病已' ];

// Array.prototype.keys() 返回一个包含数组中每个索引键的 Array Iterator 对象
let keys = names.keys();
console.log( keys , typeof( keys ) );

// 只有 Iterable 类型的 实例 才可以出现在 for/of 语句中
// 比如 Array Iterator 就属于 Iterable 类型
for( let k of keys ){
    console.log( k );
}

// Array.prototype.values() 返回一个新的 Array Iterator 对象，该对象包含数组每个元素
let values = names.values(); 
console.log( values , typeof( values ) );

for( let v of values ){
    console.log( v );
}

// Array.prototype.entries() 返回一个新的 Array Iterator 对象，该对象包含数组中每个索引的键/值对
let entries = names.entries();

for( let entry of entries ){
    console.log( entry );
}

console.log( '- - - - - - - - - - - - - - - - - - - -' );

let monkey = { id: 1001 , name: '孙悟空' , gender: '男' , age:'128000' }

for ( let name in monkey ) {
    let value = monkey[ name ];
    console.log( name , value );
}

/*
for ( let x of monkey ) { // TypeError: monkey is not iterable
    console.log( x );
}
*/

// 使用 Object 的静态函数 keys 取 monkey 所有的属性名
let ks = Object.keys( monkey ); 
console.log( ks , typeof(ks) , Array.isArray(ks) );

// 使用 Object 的静态函数 values 取 monkey 所有的属性值
let vs = Object.values( monkey ); 
console.log( vs , typeof(vs) , Array.isArray(vs) );

// 使用 Object 的静态函数 entries 取 monkey 所有的属性名和属性值
let es = Object.entries( monkey ); 
console.log( es , typeof(es) , Array.isArray(es) );